package leetcode.editor.cn;

import java.util.ArrayList;
import java.util.HashSet;

/**
 * 题目Id：面试题 01.08
 * 题目：零矩阵
 * 日期：2023-08-18 13:39:50
 */
//编写一种算法，若M × N矩阵中某个元素为0，则将其所在的行与列清零。 
//
// 
//
// 示例 1： 
//
// 输入：
//[
//  [1,1,1],
//  [1,0,1],
//  [1,1,1]
//]
//输出：
//[
//  [1,0,1],
//  [0,0,0],
//  [1,0,1]
//]
// 
//
// 示例 2： 
//
// 输入：
//[
//  [0,1,2,0],
//  [3,4,5,2],
//  [1,3,1,5]
//]
//输出：
//[
//  [0,0,0,0],
//  [0,4,5,0],
//  [0,3,1,0]
//]
// 
//
// Related Topics 数组 哈希表 矩阵 👍 168 👎 0


public class ZeroMatrixLcci {
    public static void main(String[] args) {
        Solution solution = new ZeroMatrixLcci().new Solution();
        solution.setZeroes(new int[][] {{1,1,1},{1,0,1},{1,1,1}});


        System.out.println("Hello world");
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public void setZeroes(int[][] matrix) {
/**
 * 0矩阵
 * 计算思路：先记录，然后设置0
 * 记录0元素所在的行和列
 * 在遍历  只要所在行或者所在列记录为0   就设置为0
 */
            boolean[] row = new boolean[matrix.length];
            boolean[] col = new boolean[matrix[0].length];

            for (int i = 0; i < matrix.length; i++) {
                for (int j = 0; j < matrix[0].length; j++) {
                    if (matrix[i][j] == 0) {
                        row[i] = true;
                        col[j] = true;
                    }

                }
            }
            for (int j = 0; j < matrix.length; j++) {
                for (int i = 0; i < matrix[0].length; i++) {
                    if (row[j] || col[i]) {
                        matrix[j][i] = 0;
                    }

                }

            }

        }
    }
//leetcode submit region end(Prohibit modification and deletion)

} 
